# xpath基础
#学者 小韦
#2022年6月29日 阵雨 湖南永州冷水滩区

# xpath解析：最常用且便捷高效的一种解析方式。通用性。
#     -xpath解析原理：
#         -1.实例化一个etree的对象，且需要将被解析的页面源码数据加载到该对象中。
#         -2.调用etree对象中的xpath表达式实现标签的定位和内容的捕获。
#     -环境的安装：
#         -pip install lxml
#     -如何实例化一个etree对象：
#         -1.将本地的html文档中的源码数据加载到etree对象中：
#             etree.parse(filePath)
#         -2.可以将从互联网上获取的源码数据加载到该对象中
#             etree.HTML('page_text')
#         -xpath('xpath表达式')
#      -xpath表达式:
#         -/:表示的是从根节点开始定位。表示的是一个层级。
#         -//：表示的是多个层级
from lxml import etree

tree = etree.parse('test.html')
# r = tree.xpath('/html/body/div')    #-/:表示的是从根节点开始定位。表示的是一个层级。
# r = tree.xpath('/html//div')    #-//：表示的是多个层级
# r = tree.xpath('//div') #-//：表示的是多个层级.可以从任意位置开始定位
r = tree.xpath('//div[@class="song"]')  #属性定位 tag[@attrName="attrValue"]
# r = tree.xpath('//div[@class="song"]/p[3]')  #索引定位，索引从1开始
# r = tree.xpath('//div[@class="song"]/p[3]/text()')[0]   #/test()获取的是标签中直系的文本内容，[0]不知道干啥用可以把列表变成字符串
# r = tree.xpath('//div[@class="tang"]//text()')   #//test()获取的是标签中非直系的文本内容（所有的文本内容）
# r = tree.xpath('//div[@class="song"]/img/@src') #取属性 /@attrName =>img/src
print(tree)
print(r)
